package com.example.model.common;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 统一响应结果类
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class R<T> {
    private Integer code;    // 状态码：200-成功，非200-失败
    private String message;  // 响应消息
    private T data;          // 响应数据

    /**
     * 成功响应
     */
    public static <T> R<T> success(T data) {
        return new R<>(200, "操作成功", data);
    }

    /**
     * 成功响应（无数据）
     */
    public static <T> R<T> success() {
        return new R<>(200, "操作成功", null);
    }

    /**
     * 失败响应
     */
    public static <T> R<T> fail(Integer code, String message) {
        return new R<>(code, message, null);
    }

    /**
     * 登录成功响应
     */
    public static <T> R<T> loginSuccess(T data) {
        return new R<>(200, "登录成功", data);
    }

    /**
     * 注销成功响应
     */
    public static <T> R<T> logoutSuccess() {
        return new R<>(200, "注销成功", null);
    }

    /**
     * 密码修改成功响应
     */
    public static <T> R<T> passwordChangeSuccess() {
        return new R<>(200, "密码修改成功", null);
    }

    /**
     * 原密码错误响应
     */
    public static <T> R<T> oldPasswordError() {
        return new R<>(400, "原密码错误", null);
    }

    /**
     * 未授权响应
     */
    public static <T> R<T> unauthorized() {
        return new R<>(401, "未授权，请先登录", null);
    }
}